// 3.3. 变量类型-变量声明
/**
 * 变量声明向编译器保证变量以给定的类型和名称存在，这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义，在程序连接时编译器需要实际的变量声明。

当您使用多个文件且只在其中一个文件中定义变量时（定义变量的文件在程序连接时是可用的），变量声明就显得非常有用。您可以使用 extern 关键字在任何地方声明一个变量。虽然您可以在 C++ 程序中多次声明一个变量，但变量只能在某个文件、函数或代码块中被定义一次。

同样的，在函数声明时，提供一个函数名，而函数的实际定义则可以在任何地方进行。
 *
*/
#include <iostream>

// 变量声明
extern int a;
int b;

// 函数声明
// void func();

void func (){
  std::cout << "hello" << std::endl;
}

int main()
{
  // error 未定义
  // std::cout << "a:" << a << '\n'
  //           << "b:" << b << std::endl;
  // 变量定义
  int a;
  int b;

  // 实际初始化
  a = 10;
  b = 20;

  int c = a + b;

  std::cout << "a:" << a << '\n'
            << "b:" << b << '\n'
            << "c:" << c << std::endl;

  func(); // 函数调用

  printf("-------------end----------\n");
  return 0;
}

 // 函数定义
// void func (){
//   std::cout << "hello" << std::endl;
// }